﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CorporationWars
{
    public class NameFactory
    {
        static Random rnd = new Random(DateTime.Now.Millisecond);
        public static List<string> MaleFirstNames = new List<string>();
        public static List<string> FemaleFirstNames = new List<string>();

        public static List<string> Surnames = new List<string>();
        public static List<string> Places = new List<string>();
        public static List<string> Continents = new List<string>();
        public static List<string> Hemispheres = new List<string>();
        public static List<string> Planets = new List<string>();
        public static Dictionary<string, Dictionary<string, List<string>>> CountriesByContinentsAndHemispheres = new Dictionary<string, Dictionary<string, List<string>>>();
        public static List<string> Things = new List<string>();

        static List<string> CorpJoins = new List<string>();
        static List<string> CorpEnds = new List<string>();

        static NameFactory()
        {
            #region Male First Names
            MaleFirstNames.Add("Adam");
            MaleFirstNames.Add("Adrian");
            MaleFirstNames.Add("Alan");
            MaleFirstNames.Add("Albert");
            MaleFirstNames.Add("Aubry");
            MaleFirstNames.Add("Austin");
            MaleFirstNames.Add("Aaron");
            MaleFirstNames.Add("Andrew");
            MaleFirstNames.Add("Andy");
            MaleFirstNames.Add("Angelo");
            MaleFirstNames.Add("Anton");
            MaleFirstNames.Add("Art");
            MaleFirstNames.Add("Bob");
            MaleFirstNames.Add("Bill");
            MaleFirstNames.Add("Barry");
            MaleFirstNames.Add("Brendan");
            MaleFirstNames.Add("Ben");
            MaleFirstNames.Add("Bert");
            MaleFirstNames.Add("Boris");
            MaleFirstNames.Add("Bruce");
            MaleFirstNames.Add("Buck");
            MaleFirstNames.Add("Byron");
            MaleFirstNames.Add("Caleb");
            MaleFirstNames.Add("Clive");
            MaleFirstNames.Add("Charles");
            MaleFirstNames.Add("Carl");
            MaleFirstNames.Add("Colin");
            MaleFirstNames.Add("Carter");
            MaleFirstNames.Add("Chris");
            MaleFirstNames.Add("Clint");
            MaleFirstNames.Add("Cyril");
            MaleFirstNames.Add("Dave");
            MaleFirstNames.Add("Donald");
            MaleFirstNames.Add("Darren");
            MaleFirstNames.Add("Daren");
            MaleFirstNames.Add("Dean");
            MaleFirstNames.Add("Dennis");
            MaleFirstNames.Add("Dick");
            MaleFirstNames.Add("Don");
            MaleFirstNames.Add("Edward");
            MaleFirstNames.Add("Elijah");
            MaleFirstNames.Add("Eric");
            MaleFirstNames.Add("Evan");
            MaleFirstNames.Add("Ezra");
            MaleFirstNames.Add("Fred");
            MaleFirstNames.Add("Floyd");
            MaleFirstNames.Add("Frank");
            MaleFirstNames.Add("Garry");
            MaleFirstNames.Add("George");
            MaleFirstNames.Add("Gene");
            MaleFirstNames.Add("Gino");
            MaleFirstNames.Add("Gordon");
            MaleFirstNames.Add("Gus");
            MaleFirstNames.Add("Guy");
            MaleFirstNames.Add("Harry");
            MaleFirstNames.Add("Harold");
            MaleFirstNames.Add("Herb");
            MaleFirstNames.Add("Hugo");
            MaleFirstNames.Add("Hunter");
            MaleFirstNames.Add("Ike");
            MaleFirstNames.Add("Irvin");
            MaleFirstNames.Add("Idris");
            MaleFirstNames.Add("Issac");
            MaleFirstNames.Add("Jack");
            MaleFirstNames.Add("John");
            MaleFirstNames.Add("Jim");
            MaleFirstNames.Add("James");
            MaleFirstNames.Add("Jordan");
            MaleFirstNames.Add("Jamal");
            MaleFirstNames.Add("Jarod");
            MaleFirstNames.Add("Jeff");
            MaleFirstNames.Add("Joe");
            MaleFirstNames.Add("Juan");
            MaleFirstNames.Add("Jude");
            MaleFirstNames.Add("Jacobe");
            MaleFirstNames.Add("Jose");
            MaleFirstNames.Add("Karl");
            MaleFirstNames.Add("Keeth");
            MaleFirstNames.Add("Kevin");
            MaleFirstNames.Add("Kim");
            MaleFirstNames.Add("Kyle");
            MaleFirstNames.Add("Kurt");
            MaleFirstNames.Add("Larry");
            MaleFirstNames.Add("Leo");
            MaleFirstNames.Add("Leon");
            MaleFirstNames.Add("Lawrence");
            MaleFirstNames.Add("Lee");
            MaleFirstNames.Add("Leonel");
            MaleFirstNames.Add("Lewis");
            MaleFirstNames.Add("Levi");
            MaleFirstNames.Add("Lou");
            MaleFirstNames.Add("Luigi");
            MaleFirstNames.Add("Lyndon");
            MaleFirstNames.Add("Mark");
            MaleFirstNames.Add("Marco");
            MaleFirstNames.Add("Martin");
            MaleFirstNames.Add("Matt");
            MaleFirstNames.Add("Mathew");
            MaleFirstNames.Add("Mel");
            MaleFirstNames.Add("Michael");
            MaleFirstNames.Add("Mike");
            MaleFirstNames.Add("Miles");
            MaleFirstNames.Add("Nehal");
            MaleFirstNames.Add("Nick");
            MaleFirstNames.Add("Neil");
            MaleFirstNames.Add("Neal");
            MaleFirstNames.Add("Nick");
            MaleFirstNames.Add("Norris");
            MaleFirstNames.Add("Oliver");
            MaleFirstNames.Add("Orvile");
            MaleFirstNames.Add("Otis");
            MaleFirstNames.Add("Owen");
            MaleFirstNames.Add("Paul");
            MaleFirstNames.Add("Pedro");
            MaleFirstNames.Add("Perry");
            MaleFirstNames.Add("Pete");
            MaleFirstNames.Add("Peter");
            MaleFirstNames.Add("Phil");
            MaleFirstNames.Add("Phillip");
            MaleFirstNames.Add("Rob");
            MaleFirstNames.Add("Robert");
            MaleFirstNames.Add("Ronald");
            MaleFirstNames.Add("Ron");
            MaleFirstNames.Add("Randy");
            MaleFirstNames.Add("Ray");
            MaleFirstNames.Add("Raymond");
            MaleFirstNames.Add("Richard");
            MaleFirstNames.Add("Rich");
            MaleFirstNames.Add("Roger");
            MaleFirstNames.Add("Roland");
            MaleFirstNames.Add("Romeo");
            MaleFirstNames.Add("Rubin");
            MaleFirstNames.Add("Ryan");
            MaleFirstNames.Add("Steve");
            MaleFirstNames.Add("Simon");
            MaleFirstNames.Add("Si");
            MaleFirstNames.Add("Sean");
            MaleFirstNames.Add("Scot");
            MaleFirstNames.Add("Sid");
            MaleFirstNames.Add("Sol");
            MaleFirstNames.Add("Spencer");
            MaleFirstNames.Add("Stuart");
            MaleFirstNames.Add("Taylor");
            MaleFirstNames.Add("Terry");
            MaleFirstNames.Add("Troy");
            MaleFirstNames.Add("Tom");
            MaleFirstNames.Add("Thomas");
            MaleFirstNames.Add("Tim");
            MaleFirstNames.Add("Theo");
            MaleFirstNames.Add("Travis");
            MaleFirstNames.Add("Trent");
            MaleFirstNames.Add("Ulysses");
            MaleFirstNames.Add("Vic");
            MaleFirstNames.Add("Victor");
            MaleFirstNames.Add("Vern");
            MaleFirstNames.Add("Vigo");
            MaleFirstNames.Add("Virgil");
            MaleFirstNames.Add("Vicente");
            MaleFirstNames.Add("Vinny");
            MaleFirstNames.Add("Walter");
            MaleFirstNames.Add("William");
            MaleFirstNames.Add("Will");
            MaleFirstNames.Add("Wilfred");
            MaleFirstNames.Add("Wayne");
            MaleFirstNames.Add("Wyatt");
            MaleFirstNames.Add("Xavier");
            MaleFirstNames.Add("Young");
            MaleFirstNames.Add("Zed");
            MaleFirstNames.Add("Zane");
            MaleFirstNames.Add("Zack");







            #endregion

            #region Female First Names
            FemaleFirstNames.Add("Alice");
            FemaleFirstNames.Add("Anne");
            FemaleFirstNames.Add("Amanda");
            FemaleFirstNames.Add("Alba");
            FemaleFirstNames.Add("Alison");
            FemaleFirstNames.Add("Ali");
            FemaleFirstNames.Add("Amelia");
            FemaleFirstNames.Add("Andrea");
            FemaleFirstNames.Add("Anita");
            FemaleFirstNames.Add("Ariel");
            FemaleFirstNames.Add("Ava");
            FemaleFirstNames.Add("Ayla");
            FemaleFirstNames.Add("Brenda");
            FemaleFirstNames.Add("Bella");
            FemaleFirstNames.Add("Bonnie");
            FemaleFirstNames.Add("Beryl");
            FemaleFirstNames.Add("Betsy");
            FemaleFirstNames.Add("Billie");
            FemaleFirstNames.Add("Brandi");
            FemaleFirstNames.Add("Bridget");
            FemaleFirstNames.Add("Cailin");
            FemaleFirstNames.Add("Cath");
            FemaleFirstNames.Add("Cathy");
            FemaleFirstNames.Add("Carron");
            FemaleFirstNames.Add("Clair");
            FemaleFirstNames.Add("Clare");
            FemaleFirstNames.Add("Clarice");
            FemaleFirstNames.Add("Carly");
            FemaleFirstNames.Add("Cecilia");
            FemaleFirstNames.Add("Cerys");
            FemaleFirstNames.Add("Cher");
            FemaleFirstNames.Add("Cloe");
            FemaleFirstNames.Add("Christine");
            FemaleFirstNames.Add("Cleo");
            FemaleFirstNames.Add("Crystal");
            FemaleFirstNames.Add("Daisy");
            FemaleFirstNames.Add("Daphnie");
            FemaleFirstNames.Add("Deborah");
            FemaleFirstNames.Add("Deena");
            FemaleFirstNames.Add("Diane");
            FemaleFirstNames.Add("Drew");
            FemaleFirstNames.Add("Dora");
            FemaleFirstNames.Add("Dina");
            FemaleFirstNames.Add("Eden");
            FemaleFirstNames.Add("Elin");
            FemaleFirstNames.Add("Elle");
            FemaleFirstNames.Add("Emer");
            FemaleFirstNames.Add("Erin");
            FemaleFirstNames.Add("Erica");
            FemaleFirstNames.Add("Esther");
            FemaleFirstNames.Add("Eve");
            FemaleFirstNames.Add("Evie");
            FemaleFirstNames.Add("Ethel");
            FemaleFirstNames.Add("Eunice");
            FemaleFirstNames.Add("Faith");
            FemaleFirstNames.Add("Fawn");
            FemaleFirstNames.Add("Fay");
            FemaleFirstNames.Add("Fiona");
            FemaleFirstNames.Add("Flo");
            FemaleFirstNames.Add("Freya");
            FemaleFirstNames.Add("Fern");
            FemaleFirstNames.Add("Fallon");
            FemaleFirstNames.Add("Gabby");
            FemaleFirstNames.Add("Gail");
            FemaleFirstNames.Add("Gwen");
            FemaleFirstNames.Add("Gia");
            FemaleFirstNames.Add("Greta");
            FemaleFirstNames.Add("Glenda");
            FemaleFirstNames.Add("Ginny");
            FemaleFirstNames.Add("Hailee");
            FemaleFirstNames.Add("Hanna");
            FemaleFirstNames.Add("Harper");
            FemaleFirstNames.Add("Honey");
            FemaleFirstNames.Add("Heidie");
            FemaleFirstNames.Add("Helen");
            FemaleFirstNames.Add("Hermione");
            FemaleFirstNames.Add("Hetty");
            FemaleFirstNames.Add("Hilda");
            FemaleFirstNames.Add("Hope");
            FemaleFirstNames.Add("Honor");
            FemaleFirstNames.Add("Hollie");
            FemaleFirstNames.Add("Iiona");
            FemaleFirstNames.Add("Ingrid");
            FemaleFirstNames.Add("Isobel");
            FemaleFirstNames.Add("Isla");
            FemaleFirstNames.Add("Ivy");
            FemaleFirstNames.Add("Izzy");
            FemaleFirstNames.Add("Isis");
            FemaleFirstNames.Add("Jackie");
            FemaleFirstNames.Add("Jane");
            FemaleFirstNames.Add("Janet");
            FemaleFirstNames.Add("Jinny");
            FemaleFirstNames.Add("Jenny");
            FemaleFirstNames.Add("Jillian");
            FemaleFirstNames.Add("Jill");
            FemaleFirstNames.Add("Jasmin");
            FemaleFirstNames.Add("Janis");
            FemaleFirstNames.Add("Jean");
            FemaleFirstNames.Add("Joane");
            FemaleFirstNames.Add("Joan");
            FemaleFirstNames.Add("July");
            FemaleFirstNames.Add("Jesica");
            FemaleFirstNames.Add("Jo");
            FemaleFirstNames.Add("Jo-lean");
            FemaleFirstNames.Add("Jodie");
            FemaleFirstNames.Add("Joy");
            FemaleFirstNames.Add("June");
            FemaleFirstNames.Add("Kate");
            FemaleFirstNames.Add("Kath");
            FemaleFirstNames.Add("Katherin");
            FemaleFirstNames.Add("Kerry");
            FemaleFirstNames.Add("Karly");
            FemaleFirstNames.Add("Kat");
            FemaleFirstNames.Add("Katrina");
            FemaleFirstNames.Add("Kay");
            FemaleFirstNames.Add("Kellie");
            FemaleFirstNames.Add("Keri");
            FemaleFirstNames.Add("Kim");
            FemaleFirstNames.Add("Kimberly");
            FemaleFirstNames.Add("Kris");
            FemaleFirstNames.Add("Kyra");
            FemaleFirstNames.Add("Lacey");
            FemaleFirstNames.Add("Lynn");
            FemaleFirstNames.Add("Lin");
            FemaleFirstNames.Add("Linder");
            FemaleFirstNames.Add("Layla");
            FemaleFirstNames.Add("Leila");
            FemaleFirstNames.Add("Libby");
            FemaleFirstNames.Add("Lila");
            FemaleFirstNames.Add("Lilian");
            FemaleFirstNames.Add("Lilly");
            FemaleFirstNames.Add("Lisa");
            FemaleFirstNames.Add("Louise");
            FemaleFirstNames.Add("Liz");
            FemaleFirstNames.Add("Lizzy");
            FemaleFirstNames.Add("Lora");
            FemaleFirstNames.Add("Lola");
            FemaleFirstNames.Add("Lori");
            FemaleFirstNames.Add("Lucy");
            FemaleFirstNames.Add("Lulu");
            FemaleFirstNames.Add("Lottie");
            FemaleFirstNames.Add("Macy");
            FemaleFirstNames.Add("Mandy");
            FemaleFirstNames.Add("Mirriam");
            FemaleFirstNames.Add("Mary");
            FemaleFirstNames.Add("Magie");
            FemaleFirstNames.Add("Megan");
            FemaleFirstNames.Add("Meg");
            FemaleFirstNames.Add("Marcy");
            FemaleFirstNames.Add("Makenzie");
            FemaleFirstNames.Add("Margo");
            FemaleFirstNames.Add("Marie");
            FemaleFirstNames.Add("Mavis");
            FemaleFirstNames.Add("Maya");
            FemaleFirstNames.Add("Miley");
            FemaleFirstNames.Add("Mina");
            FemaleFirstNames.Add("Mona");
            FemaleFirstNames.Add("Molly");
            FemaleFirstNames.Add("Myfanwy");
            FemaleFirstNames.Add("Nadine");
            FemaleFirstNames.Add("Nancy");
            FemaleFirstNames.Add("Nickola");
            FemaleFirstNames.Add("Nicky");
            FemaleFirstNames.Add("Nina");
            FemaleFirstNames.Add("Nova");
            FemaleFirstNames.Add("Neve");
            FemaleFirstNames.Add("Odele");
            FemaleFirstNames.Add("Olive");
            FemaleFirstNames.Add("Orla");
            FemaleFirstNames.Add("Opal");
            FemaleFirstNames.Add("Paige");
            FemaleFirstNames.Add("Pennie");
            FemaleFirstNames.Add("Pam");
            FemaleFirstNames.Add("Pamela");
            FemaleFirstNames.Add("Pat");
            FemaleFirstNames.Add("Patricia");
            FemaleFirstNames.Add("Paula");
            FemaleFirstNames.Add("Pauline");
            FemaleFirstNames.Add("Polly");
            FemaleFirstNames.Add("Poppy");
            FemaleFirstNames.Add("Philipa");
            FemaleFirstNames.Add("Quinn");
            FemaleFirstNames.Add("Rachel");
            FemaleFirstNames.Add("Riana");
            FemaleFirstNames.Add("Rian");
            FemaleFirstNames.Add("Ruby");
            FemaleFirstNames.Add("Rea");
            FemaleFirstNames.Add("Rae");
            FemaleFirstNames.Add("Rania");
            FemaleFirstNames.Add("Raven");
            FemaleFirstNames.Add("Rebecca");
            FemaleFirstNames.Add("Rena");
            FemaleFirstNames.Add("Rhea");
            FemaleFirstNames.Add("Ria");
            FemaleFirstNames.Add("Rita");
            FemaleFirstNames.Add("Rose");
            FemaleFirstNames.Add("Rosa");
            FemaleFirstNames.Add("Ruth");
            FemaleFirstNames.Add("Sabrian");
            FemaleFirstNames.Add("Saffron");
            FemaleFirstNames.Add("Sally");
            FemaleFirstNames.Add("Sam");
            FemaleFirstNames.Add("Sandra");
            FemaleFirstNames.Add("Sacha");
            FemaleFirstNames.Add("Saskia");
            FemaleFirstNames.Add("Selma");
            FemaleFirstNames.Add("Selina");
            FemaleFirstNames.Add("Sarah");
            FemaleFirstNames.Add("Sharon");
            FemaleFirstNames.Add("Sue");
            FemaleFirstNames.Add("Susanne");
            FemaleFirstNames.Add("Sherry");
            FemaleFirstNames.Add("Sian");
            FemaleFirstNames.Add("Sky");
            FemaleFirstNames.Add("Sophia");
            FemaleFirstNames.Add("Sonja");
            FemaleFirstNames.Add("Sybil");
            FemaleFirstNames.Add("Sutton");
            FemaleFirstNames.Add("Tabitha");
            FemaleFirstNames.Add("Tala");
            FemaleFirstNames.Add("Tammi");
            FemaleFirstNames.Add("Tanya");
            FemaleFirstNames.Add("Tara");
            FemaleFirstNames.Add("Tasha");
            FemaleFirstNames.Add("Taylor");
            FemaleFirstNames.Add("Teresa");
            FemaleFirstNames.Add("Tessa");
            FemaleFirstNames.Add("Thea");
            FemaleFirstNames.Add("Toni");
            FemaleFirstNames.Add("Tori");
            FemaleFirstNames.Add("Tracy");
            FemaleFirstNames.Add("Trisha");
            FemaleFirstNames.Add("Trudy");
            FemaleFirstNames.Add("Ulrica");
            FemaleFirstNames.Add("Uma");
            FemaleFirstNames.Add("Una");
            FemaleFirstNames.Add("Ursula");
            FemaleFirstNames.Add("Val");
            FemaleFirstNames.Add("Valerie");
            FemaleFirstNames.Add("Velma");
            FemaleFirstNames.Add("Vera");
            FemaleFirstNames.Add("Vickie");
            FemaleFirstNames.Add("Vivian");
            FemaleFirstNames.Add("Violet");
            FemaleFirstNames.Add("Vonda");
            FemaleFirstNames.Add("Veronica");
            FemaleFirstNames.Add("Wanda");
            FemaleFirstNames.Add("Wendy");
            FemaleFirstNames.Add("Willow");
            FemaleFirstNames.Add("Wilma");
            FemaleFirstNames.Add("Xena");
            FemaleFirstNames.Add("Yasmin");
            FemaleFirstNames.Add("Yvette");
            FemaleFirstNames.Add("Yvonne");
            FemaleFirstNames.Add("Zarah");
            FemaleFirstNames.Add("Zoe");
            #endregion

            #region Surnames
            Surnames.Add("Smith");
            Surnames.Add("Smyth");
            Surnames.Add("Jones");
            Surnames.Add("Taylor");
            Surnames.Add("Williams");
            Surnames.Add("Brown");
            Surnames.Add("Daves");
            Surnames.Add("Evans");
            Surnames.Add("Wilson");
            Surnames.Add("Thomas");
            Surnames.Add("Roberts");
            Surnames.Add("Johnson");
            Surnames.Add("Lewis");
            Surnames.Add("Walker");
            Surnames.Add("Robinson");
            Surnames.Add("Wood");
            Surnames.Add("Thompson");
            Surnames.Add("White");
            Surnames.Add("Watson");
            Surnames.Add("Jackson");
            Surnames.Add("Wright");
            Surnames.Add("Green");
            Surnames.Add("Harris");
            Surnames.Add("Cooper");
            Surnames.Add("King");
            Surnames.Add("Lee");
            Surnames.Add("Martin");
            Surnames.Add("Clarke");
            Surnames.Add("Harrison");
            Surnames.Add("Scott");
            Surnames.Add("Young");
            Surnames.Add("Morris");
            Surnames.Add("Hall");
            Surnames.Add("Ward");
            Surnames.Add("Turner");
            Surnames.Add("Carter");
            Surnames.Add("Phillips");
            Surnames.Add("Mitchel");
            Surnames.Add("Patel");
            Surnames.Add("Adams");
            Surnames.Add("Campbell");
            Surnames.Add("Allen");
            Surnames.Add("Cook");
            Surnames.Add("Baily");
            Surnames.Add("Parker");
            Surnames.Add("Miller");
            Surnames.Add("Davis");
            Surnames.Add("Murphy");
            Surnames.Add("Price");
            Surnames.Add("Bell");
            Surnames.Add("Baker");
            Surnames.Add("Grifiths");
            Surnames.Add("Kelly");
            Surnames.Add("Simpson");
            Surnames.Add("Marsall");
            Surnames.Add("Collins");
            Surnames.Add("Bennett");
            Surnames.Add("Cox");
            Surnames.Add("Richardson");
            Surnames.Add("Fox");
            Surnames.Add("Gray");
            Surnames.Add("Rose");
            Surnames.Add("Chapman");
            Surnames.Add("Hunt");
            Surnames.Add("Roberson");
            Surnames.Add("Shaw");
            Surnames.Add("Reynolds");
            Surnames.Add("Lloyd");
            Surnames.Add("Ellis");
            Surnames.Add("Richards");
            Surnames.Add("Russell");
            Surnames.Add("Wilkinson");
            Surnames.Add("Khan");
            Surnames.Add("Graham");
            Surnames.Add("Stewart");
            Surnames.Add("Reid");
            Surnames.Add("Murray");
            Surnames.Add("Powell");
            Surnames.Add("Palmer");
            Surnames.Add("Holmes");
            Surnames.Add("Rogers");
            Surnames.Add("Stevens");
            Surnames.Add("Walsh");
            Surnames.Add("Hunter");
            Surnames.Add("Thomson");
            Surnames.Add("Mathews");
            Surnames.Add("Ross");
            Surnames.Add("Owen");
            Surnames.Add("Mason");
            Surnames.Add("Knight");
            Surnames.Add("Kenedy");
            Surnames.Add("Butler");
            Surnames.Add("Saunders");

            Surnames.Add("Tesser-Ashpool");
            Surnames.Add("Humphrey");
            Surnames.Add("Lucas");
            Surnames.Add("Duffy");

            #endregion

            #region Places

            #region A            
            Places.Add("Aarhus");
            Places.Add("Afghanistan");
            Places.Add("Africa");
            Places.Add("Alaska");
            Places.Add("Albania");
            Places.Add("Aleppo");
            Places.Add("Algeria");
            Places.Add("Alps");
            Places.Add("Amalfi coast");
            Places.Add("Amazon");
            Places.Add("American Samoa");
            Places.Add("Amsterdam");
            Places.Add("Andalucia");
            Places.Add("Andorra");
            Places.Add("Angkor Wat");
            Places.Add("Angola");
            Places.Add("Anguilla");
            Places.Add("Antarctica");
            Places.Add("Antigua and Barbuda");
            Places.Add("Antwerp");
            Places.Add("Arctic");
            Places.Add("Argentina");
            Places.Add("Arles");
            Places.Add("Armenia");
            Places.Add("Aruba");
            Places.Add("Asia");
            Places.Add("Athens");
            Places.Add("Auckland");
            Places.Add("Austin");
            Places.Add("Australasia");
            Places.Add("Australia");
            Places.Add("Austria");
            Places.Add("Avignon");
            Places.Add("Azerbaijan");
            Places.Add("Azores");
            #endregion

            #region B            
            Places.Add("Baden-Baden");
            Places.Add("Bahamas");
            Places.Add("Bahrain");
            Places.Add("Balearic Islands");
            Places.Add("Bali");
            Places.Add("Bangkok");
            Places.Add("Bangladesh");
            Places.Add("Barbados");
            Places.Add("Barcelona");
            Places.Add("Barnsley");
            Places.Add("Basque country");
            Places.Add("Bath");
            Places.Add("Beijing");
            Places.Add("Beirut");
            Places.Add("Belarus");
            Places.Add("Belfast");
            Places.Add("Belgium");
            Places.Add("Belize");
            Places.Add("Benin");
            Places.Add("Bergen");
            Places.Add("Berkshire");
            Places.Add("Berlin");
            Places.Add("Bermuda");
            Places.Add("Bhutan");
            Places.Add("Bilbao");
            Places.Add("Birmingham");
            Places.Add("Bloemfontein");
            Places.Add("Bolivia");
            Places.Add("Bologna");
            Places.Add("Bordeaux");
            Places.Add("Bosnia-Herzegovina");
            Places.Add("Boston");
            Places.Add("Botswana");
            Places.Add("Bournemouth");
            Places.Add("Bradford");
            Places.Add("Bratislava");
            Places.Add("Brazil");
            Places.Add("Brighton");
            Places.Add("Brisbane");
            Places.Add("Bristol");
            Places.Add("Brittany");
            Places.Add("Bruges");
            Places.Add("Brunei");
            Places.Add("Brussels");
            Places.Add("Bucharest");
            Places.Add("Budapest");
            Places.Add("Buenos Aires");
            Places.Add("Bulgaria");
            Places.Add("Burkina Faso");
            Places.Add("Burma");
            Places.Add("Burundi");
            #endregion

            #region C            
            Places.Add("Cairo");
            Places.Add("Calais");
            Places.Add("California");
            Places.Add("Cambodia");
            Places.Add("Cambridge");
            Places.Add("Cameroon");
            Places.Add("Canada");
            Places.Add("Canary Islands");
            Places.Add("Canterbury");
            Places.Add("Cape Cod");
            Places.Add("Cape Town");
            Places.Add("Cape Verde");
            Places.Add("Caracas");
            Places.Add("Carcassonne");
            Places.Add("Cardiff");
            Places.Add("Caribbean");
            Places.Add("Casablanca");
            Places.Add("Catalonia");
            Places.Add("Cayman Islands");
            Places.Add("Central African Republic");
            Places.Add("Chad");
            Places.Add("Chamonix");
            Places.Add("Channel Islands");
            Places.Add("Chester");
            Places.Add("Chicago");
            Places.Add("Chile");
            Places.Add("China");
            Places.Add("Chios");
            Places.Add("Christmas Island");
            Places.Add("Cocos Island");
            Places.Add("Cologne");
            Places.Add("Colombia");
            Places.Add("Colorado");
            Places.Add("Comoros");
            Places.Add("Congo Brazzaville");
            Places.Add("Cook Islands");
            Places.Add("Copenhagen");
            Places.Add("Corfu");
            Places.Add("Cork");
            Places.Add("Cornwall");
            Places.Add("Corsica");
            Places.Add("Costa Rica");
            Places.Add("Cotswolds");
            Places.Add("Crete");
            Places.Add("Croatia");
            Places.Add("Cuba");
            Places.Add("Cyprus");
            Places.Add("Czech Republic");
            #endregion

            #region D            
            Places.Add("Dakar");
            Places.Add("Damascus");
            Places.Add("Delhi");
            Places.Add("Democratic Republic of Congo");
            Places.Add("Denmark");
            Places.Add("Denver");
            Places.Add("Derbyshire");
            Places.Add("Detroit");
            Places.Add("Devon");
            Places.Add("Djibouti");
            Places.Add("Dolomites");
            Places.Add("Dominica");
            Places.Add("Dominican Republic");
            Places.Add("Dordogne");
            Places.Add("Dorset");
            Places.Add("Dresden");
            Places.Add("Dubai");
            Places.Add("Dublin");
            Places.Add("Dubrovnik");
            Places.Add("Durban");
            #endregion

            #region E            
            Places.Add("Ecuador");
            Places.Add("Edinburgh");
            Places.Add("Egypt");
            Places.Add("El Salvador");
            Places.Add("England");
            Places.Add("Equatorial Guinea");
            Places.Add("Eritrea");
            Places.Add("Essex");
            Places.Add("Estonia");
            Places.Add("Ethiopia");
            Places.Add("Europe");
            Places.Add("European Union");
            Places.Add("Exeter");
            #endregion

            #region F            
            Places.Add("Falkland Islands");
            Places.Add("Faroe Islands");
            Places.Add("Fez");
            Places.Add("Fiji");
            Places.Add("Finland");
            Places.Add("Florence");
            Places.Add("Florida");
            Places.Add("France");
            Places.Add("Frankfurt");
            Places.Add("French Guiana");
            #endregion

            #region G            
            Places.Add("Gabon");
            Places.Add("Galway");
            Places.Add("Galapagos Islands");
            Places.Add("Gambia");
            Places.Add("Genoa");
            Places.Add("Georgia");
            Places.Add("Germany");
            Places.Add("Gerona");
            Places.Add("Ghana");
            Places.Add("Ghent");
            Places.Add("Gibraltar");
            Places.Add("Glasgow");
            Places.Add("Glastonbury");
            Places.Add("Gloucestershire");
            Places.Add("Goa");
            Places.Add("Gothenburg");
            Places.Add("Granada");
            Places.Add("Graz");
            Places.Add("Greece");
            Places.Add("Greek Islands");
            Places.Add("Greenland");
            Places.Add("Grenada");
            Places.Add("Guadeloupe");
            Places.Add("Guam");
            Places.Add("Guatemala");
            Places.Add("Guinea");
            Places.Add("Guinea-Bissau");
            Places.Add("Guyana");
            #endregion

            #region H            
            Places.Add("Haiti");
            Places.Add("Hamburg");
            Places.Add("Hastings");
            Places.Add("Hawaii");
            Places.Add("Helsinki");
            Places.Add("Honduras");
            Places.Add("Hong Kong");
            Places.Add("Hungary");
            Places.Add("The Hague");
            #endregion

            #region I            
            Places.Add("Ibiza");
            Places.Add("Iceland");
            Places.Add("India");
            Places.Add("Indonesia");
            Places.Add("Inverness");
            Places.Add("Iran");
            Places.Add("Iraq");
            Places.Add("Ireland");
            Places.Add("Isle of Skye");
            Places.Add("Isle of Wight");
            Places.Add("Israel");
            Places.Add("Istanbul");
            Places.Add("Italy");
            Places.Add("Ivory Coast");
            #endregion

            #region J            
            Places.Add("Jamaica");
            Places.Add("Japan");
            Places.Add("Jerusalem");
            Places.Add("Johannesburg");
            Places.Add("Jordan");
            Places.Add("Jura");
            #endregion

            #region K            
            Places.Add("Karachi");
            Places.Add("Kashmir");
            Places.Add("Kazakhstan");
            Places.Add("Kent");
            Places.Add("Kentucky");
            Places.Add("Kenya");
            Places.Add("Kerala");
            Places.Add("Kiev");
            Places.Add("Kiribati");
            Places.Add("Kolkata");
            Places.Add("Kosovo");
            Places.Add("Krakow");
            Places.Add("Kuala Lumpur");
            Places.Add("Kuwait");
            Places.Add("Kyoto");
            Places.Add("Kyrgyzstan");
            #endregion

            #region L            
            Places.Add("La Paz");
            Places.Add("La Plagne");
            Places.Add("Ladakh");
            Places.Add("Lahore");
            Places.Add("Lake District");
            Places.Add("Lancashire");
            Places.Add("Laos");
            Places.Add("Lapland");
            Places.Add("Las Vegas");
            Places.Add("Latvia");
            Places.Add("Lausanne");
            Places.Add("Lebanon");
            Places.Add("Leeds");
            Places.Add("Leicester");
            Places.Add("Lesotho");
            Places.Add("Libya");
            Places.Add("Liechtenstein");
            Places.Add("Lille");
            Places.Add("Lima");
            Places.Add("Limerick");
            Places.Add("Lincolnshire");
            Places.Add("Lisbon");
            Places.Add("Lithuania");
            Places.Add("Liverpool");
            Places.Add("Liege");
            Places.Add("Ljubljana");
            Places.Add("London");
            Places.Add("Los Angeles");
            Places.Add("Louisville");
            Places.Add("Luxembourg");
            Places.Add("Lyon");
            #endregion

            #region M            
            Places.Add("Macau");
            Places.Add("Macedonia");
            Places.Add("Madagascar");
            Places.Add("Madrid");
            Places.Add("Malawi");
            Places.Add("Malaysia");
            Places.Add("Maldives");
            Places.Add("Mali");
            Places.Add("Mallorca");
            Places.Add("Malmo");
            Places.Add("Malta");
            Places.Add("Manchester");
            Places.Add("Manila");
            Places.Add("Mantua");
            Places.Add("Marrakech");
            Places.Add("Marseille");
            Places.Add("Marshall Islands");
            Places.Add("Martinique");
            Places.Add("Mauritania");
            Places.Add("Mauritius");
            Places.Add("Mayotte");
            Places.Add("Mecca");
            Places.Add("Melbourne");
            Places.Add("Memphis");
            Places.Add("Mexico");
            Places.Add("Mexico City");
            Places.Add("Miami");
            Places.Add("Micronesia");
            Places.Add("Middle East");
            Places.Add("Milan");
            Places.Add("Moldova");
            Places.Add("Monaco");
            Places.Add("Mongolia");
            Places.Add("Montana");
            Places.Add("Montenegro");
            Places.Add("Montreal");
            Places.Add("Montserrat");
            Places.Add("Morocco");
            Places.Add("Moscow");
            Places.Add("Mozambique");
            Places.Add("Mumbai");
            Places.Add("Munich");
            Places.Add("Murcia");
            #endregion

            #region N            
            Places.Add("Namibia");
            Places.Add("Naples");
            Places.Add("Nashville");
            Places.Add("Nauru");
            Places.Add("Nelspruit");
            Places.Add("Nepal");
            Places.Add("Netherlands");
            Places.Add("Nevada");
            Places.Add("New Caledonia");
            Places.Add("New England");
            Places.Add("New Forest");
            Places.Add("New Orleans");
            Places.Add("New York");
            Places.Add("New Zealand");
            Places.Add("Newcastle");
            Places.Add("Nicaragua");
            Places.Add("Nice");
            Places.Add("Niger");
            Places.Add("Nigeria");
            Places.Add("Niue");
            Places.Add("Norfolk");
            Places.Add("Norfolk Island");
            Places.Add("Normandy");
            Places.Add("North Korea");
            Places.Add("Northern Ireland");
            Places.Add("Norway");
            Places.Add("Nottingham");
            Places.Add("Nimes");
            #endregion

            #region O            
            Places.Add("Oman");
            Places.Add("Oporto");
            Places.Add("Osaka");
            Places.Add("Oslo");
            Places.Add("Oxford");
            #endregion

            #region P            
            Places.Add("Pakistan");
            Places.Add("Palau");
            Places.Add("Palestine");
            Places.Add("Palma");
            Places.Add("Panama");
            Places.Add("Papua New Guinea");
            Places.Add("Paraguay");
            Places.Add("Paris");
            Places.Add("Patagonia");
            Places.Add("Peak District");
            Places.Add("Perth");
            Places.Add("Peru");
            Places.Add("Philippines");
            Places.Add("Phnom Penh");
            Places.Add("Pisa");
            Places.Add("Pitcairn");
            Places.Add("Pnomh Penh");
            Places.Add("Poland");
            Places.Add("Polokwane");
            Places.Add("Polynesia");
            Places.Add("Port Elizabeth");
            Places.Add("Portland USA");
            Places.Add("Portsmouth");
            Places.Add("Portugal");
            Places.Add("Poznan");
            Places.Add("Prague");
            Places.Add("Pretoria");
            Places.Add("Provence");
            Places.Add("Puerto Rico");
            Places.Add("Pyrenees");
            #endregion

            #region Q            
            Places.Add("Qatar");
            #endregion

            #region R            
            Places.Add("Rajasthan");
            Places.Add("Rangoon");
            Places.Add("Reading");
            Places.Add("Red Sea");
            Places.Add("Reykjavik");
            Places.Add("Riga");
            Places.Add("Rio de Janeiro");
            Places.Add("Romania");
            Places.Add("Rome");
            Places.Add("Rotterdam");
            Places.Add("Russia");
            Places.Add("Rustenburg");
            Places.Add("Rwanda");
            Places.Add("Reunion");
            #endregion

            #region S            
            Places.Add("Sao Paulo");
            Places.Add("Saint Kitts and Nevis");
            Places.Add("Saint Vincent and the Grenadines");
            Places.Add("Salisbury");
            Places.Add("Salonika");
            Places.Add("Salzburg");
            Places.Add("Samoa");
            Places.Add("San Francisco");
            Places.Add("San Marino");
            Places.Add("San Sebastian");
            Places.Add("Santiago de Compostela");
            Places.Add("Sardinia");
            Places.Add("Saudi Arabia");
            Places.Add("Scilly");
            Places.Add("Scotland");
            Places.Add("Seattle");
            Places.Add("Senegal");
            Places.Add("Seoul");
            Places.Add("Serbia");
            Places.Add("Serbia and Montenegro");
            Places.Add("Seville");
            Places.Add("Seychelles");
            Places.Add("Shanghai");
            Places.Add("Sicily");
            Places.Add("Sierra Leone");
            Places.Add("Singapore");
            Places.Add("Skegness");
            Places.Add("Slovakia");
            Places.Add("Slovenia");
            Places.Add("Snowdonia");
            Places.Add("Solomon Islands");
            Places.Add("Somalia");
            Places.Add("South Africa");
            Places.Add("South America");
            Places.Add("South Korea");
            Places.Add("Spain");
            Places.Add("Sri Lanka");
            Places.Add("St Etienne");
            Places.Add("St Helena");
            Places.Add("St Lucia");
            Places.Add("St Petersburg");
            Places.Add("St Tropez");
            Places.Add("Staffordshire");
            Places.Add("Stockholm");
            Places.Add("Strasbourg");
            Places.Add("Stratford-upon-Avon");
            Places.Add("Sudan");
            Places.Add("Suffolk");
            Places.Add("Suriname");
            Places.Add("Swaziland");
            Places.Add("Sweden");
            Places.Add("Switzerland");
            Places.Add("Sydney");
            Places.Add("Syria");
            #endregion

            #region T            
            Places.Add("Taiwan");
            Places.Add("Tajikistan");
            Places.Add("Tallinn");
            Places.Add("Tangier");
            Places.Add("Tanzania");
            Places.Add("Tasmania");
            Places.Add("Tbilisiv");
            Places.Add("Tel Aviv");
            Places.Add("Texas");
            Places.Add("Thailand");
            Places.Add("Tibet");
            Places.Add("Timor-Leste");
            Places.Add("Togo");
            Places.Add("Tokyo");
            Places.Add("Tonga");
            Places.Add("Toronto");
            Places.Add("Torquay");
            Places.Add("Toulouse");
            Places.Add("Trinidad and Tobago");
            Places.Add("Tromso");
            Places.Add("Tunis");
            Places.Add("Tunisia");
            Places.Add("Tupelo");
            Places.Add("Turin");
            Places.Add("Turkey");
            Places.Add("Turkmenistan");
            Places.Add("Tuscany");
            Places.Add("Tuvalu");
            #endregion

            #region U            
            Places.Add("Uganda");
            Places.Add("Ukraine");
            Places.Add("Umbria");
            Places.Add("United Arab Emirates");
            Places.Add("United Kingdom");
            Places.Add("United States");
            Places.Add("Uruguay");
            Places.Add("Utah");
            Places.Add("Uzbekistan");
            #endregion

            #region V            
            Places.Add("British Virgin Islands");
            Places.Add("US Virgin Islands");
            Places.Add("Val d`Isere");
            Places.Add("Valencia");
            Places.Add("Vancouver");
            Places.Add("Vanuatu");
            Places.Add("Vatican City State");
            Places.Add("Venezuela");
            Places.Add("Venice");
            Places.Add("Verona");
            Places.Add("Vienna");
            Places.Add("Vietnam");
            Places.Add("Vilnius");
            Places.Add("Volgograd");
            #endregion

            #region W            
            Places.Add("Wales");
            Places.Add("Warsaw");
            Places.Add("Washington DC");
            Places.Add("Wellington");
            Places.Add("Western Sahara");
            Places.Add("Worcester");
            Places.Add("Wroclaw");
            #endregion

            #region X            

            #endregion

            #region Y            
            Places.Add("Yekaterinburg");
            Places.Add("Yemen");
            Places.Add("Yorkshire");
            #endregion

            #region Z            
            Places.Add("Zagreb");
            Places.Add("Zaire");
            Places.Add("Zambia");
            Places.Add("Zimbabwe");
            Places.Add("Zurich");
            #endregion

            #region Randoms
            
            Places.Add("Park");
            Places.Add("Space");
            Places.Add("Palace");
            
            #endregion

            #endregion

            #region Things

            #endregion

            #region Hemispheres
            Hemispheres.Add("Northern Hemisphere");
            Hemispheres.Add("Sothern Hemisphere");

            CountriesByContinentsAndHemispheres.Add(Hemispheres[0], new Dictionary<string, List<string>>());
            CountriesByContinentsAndHemispheres.Add(Hemispheres[1], new Dictionary<string, List<string>>());
            #endregion

            #region Continent
            Continents.Add("Africa");
            Continents.Add("Antarctica");
            Continents.Add("Australia");
            Continents.Add("Asia");
            Continents.Add("Europe");
            Continents.Add("North America");
            Continents.Add("South America");

            CountriesByContinentsAndHemispheres[Hemispheres[0]].Add("Asia", new List<string>());
            CountriesByContinentsAndHemispheres[Hemispheres[0]].Add("Europe", new List<string>());
            CountriesByContinentsAndHemispheres[Hemispheres[0]].Add("North America", new List<string>());

            CountriesByContinentsAndHemispheres[Hemispheres[1]].Add("Africa", new List<string>());
            CountriesByContinentsAndHemispheres[Hemispheres[1]].Add("Antarctica", new List<string>());
            CountriesByContinentsAndHemispheres[Hemispheres[1]].Add("Australia", new List<string>());
            CountriesByContinentsAndHemispheres[Hemispheres[1]].Add("South America", new List<string>());

            #endregion

            #region Countries
            #region Asia
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Afghanistan");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Armenia");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Azerbaijan");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Bahrain");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Bangladesh");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Bhutan");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Brunei");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Cambodia");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("China");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("East Timor");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Georgia");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("India");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Indonesia");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Iran");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Iraq");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Japan");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Kazakhstan");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("North Korea");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("South Korea");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Kuwait");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Kyrgyzstan");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Laos");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Lebanon");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Malaysia");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Maldives");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Mongolia");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Myanmar");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Nepal");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Oman");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Pakistan");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Papua New Guinea");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Philippines");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Qatar");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Russia");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Saudi Arabia");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Syria");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Singapore");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Sri Lanka");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Taiwan");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Tajikistan");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Thailand");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Turkmenistan");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("United Arab Emirates");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Uzbekistan");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Vietnam");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Asia"].Add("Yemen");
            #endregion
            #region Europe
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Albania");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Andorra");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Armenia");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Austria");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Belarus");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Belgium");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Bosnia and Herzegovina");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Bulgaria");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Croatia");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Cyprus");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Czech Republic");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Denmark");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Estonia");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Finland");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Finland");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Georgia");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Georgia");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Greece");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Hungary");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Hungary");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Ireland");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Italy");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Kosovo");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Latvia");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Liechtenstein");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Lithuania");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Luxembourg");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Macedonia");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Macedonia");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Moldova");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Monaco");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Montenegro");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Netherlands");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Norway");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Poland");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Portugal");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Romania");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Russia");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("San Marino");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Serbia");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Slovakia");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Slovenia");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Spain");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Sweden");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Switzerland");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("Ukraine");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["Europe"].Add("United Kingdom");            
            #endregion
            #region North America
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["North America"].Add("Canada");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["North America"].Add("Greenland");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["North America"].Add("Mexico");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["North America"].Add("United States of America");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["North America"].Add("Antigua and Barbuda");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["North America"].Add("The Bahamas");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["North America"].Add("Barbados");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["North America"].Add("Belize");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["North America"].Add("Costa Rica");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["North America"].Add("Cuba");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["North America"].Add("Dominica");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["North America"].Add("Dominican Republic");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["North America"].Add("El Salvador");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["North America"].Add("Grenada");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["North America"].Add("Guatemala");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["North America"].Add("Haiti");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["North America"].Add("Honduras");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["North America"].Add("Jamaica");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["North America"].Add("Nicaragua");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["North America"].Add("Panama");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["North America"].Add("Saint Kitts and Nevis");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["North America"].Add("Saint Lucia");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["North America"].Add("Saint Vincent and the Grenadines");
            CountriesByContinentsAndHemispheres[Hemispheres[0]]["North America"].Add("Trinidad and Tobago");
            #endregion
            #region South America
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["South America"].Add("Argentina");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["South America"].Add("Bolivia");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["South America"].Add("Brazil");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["South America"].Add("Chile");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["South America"].Add("Colombia");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["South America"].Add("Ecuador");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["South America"].Add("Guyana");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["South America"].Add("Paraguay");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["South America"].Add("Peru");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["South America"].Add("Peru");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["South America"].Add("Uruguay");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["South America"].Add("Venezuela");
            #endregion
            #region Africa
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Angola");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Benin");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Botswana");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Burkina Faso");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Burundi");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Cameroon");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Cape Verde");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Central African Republic");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Chad");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Comoros");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Republic of the Congo");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Democratic Republic of the Congo");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Cote d'Ivoire");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Djibouti");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Equatorial Guinea");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Eritrea");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Ethiopia");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Gabon");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("The Gambia");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("The Gambia");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Guinea");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Guinea-Bissau");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Kenya");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Lesotho");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Liberia");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Madagascar");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Malawi");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Mali");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Mauritania");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Mauritius");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Mozambique");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Namibia");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Niger");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Nigeria");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Rwanda");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Sao Tome and Principe");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Senegal");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Seychelles");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Sierra Leone");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("South Africa");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("South Sudan");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Sudan");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Swaziland");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Tanzania");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Togo");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Uganda");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Zambia");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Africa"].Add("Zimbabwe");

            #endregion
            #region Australia
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Australia"].Add("Australia");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Australia"].Add("East Timor");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Australia"].Add("Fiji");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Australia"].Add("Kiribati");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Australia"].Add("Marshall Islands");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Australia"].Add("Federated States of Micronesia");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Australia"].Add("Nauru");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Australia"].Add("New Zealand");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Australia"].Add("Palau");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Australia"].Add("Papua New Guinea");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Australia"].Add("Samoa");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Australia"].Add("Solomon Islands");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Australia"].Add("Tonga");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Australia"].Add("Tuvalu");
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Australia"].Add("Vanuatu");
            #endregion
            #region Antartica
            CountriesByContinentsAndHemispheres[Hemispheres[1]]["Antarctica"].Add("Antarctica");
            #endregion
            #endregion

            #region Planets
            Planets.Add("Earth");
            Planets.Add("The Moon");
            Planets.Add("Mars");
            Planets.Add("Venus");
            Planets.Add("Titan");
            Planets.Add("Europa");
            #endregion

            CorpJoins.Add(" & ");
            CorpJoins.Add(", ");
            CorpJoins.Add("-");
            CorpJoins.Add(" of ");
            CorpJoins.Add(" ");

            CorpEnds.Add(" Bros.");
            CorpEnds.Add(" Sis.");
            CorpEnds.Add(" Inc.");
            CorpEnds.Add(" Co.");
            CorpEnds.Add(" Asc.");
            CorpEnds.Add(" Ascn.");
        }

        public static string CreateCorporationName()
        {
            string retVal = string.Empty;

            int words = rnd.Next(3)+1;
            bool hasEnd = rnd.Next(2) == 0;
            bool plural = rnd.Next(2) == 0;
            bool family = rnd.Next(2) == 0;

            if (family)
            {
                retVal += GetSurname();

                if (words == 1 && plural && retVal[retVal.Length - 1] != 's')
                    retVal += "'s ";

                if (words > 1)
                    retVal += GetJoin();

                words--;
            }

            int nt = 0;
            for (int w = 0; w < words; w++)
            {
                nt = rnd.Next(2);
                switch (nt)
                {
                    case 0:
                        retVal += GetPlace();
                        break;
                    case 1:
                        retVal += GetSurname();
                        break;
                }

                if (words == 1 && plural && retVal[retVal.Length - 1] != 's')
                    retVal += "'s ";

                if (words > 1 && w < words - 1)
                {
                    List<string> exclusions = new List<string>();
                    if (nt != 1)
                    {
                        exclusions.Add(", ");
                        exclusions.Add(" of ");
                    }

                    if (retVal.Contains(" & "))
                        exclusions.Add(" & ");

                    if (retVal.Contains("-"))
                        exclusions.Add("-");

                    if(exclusions.Count != 0)
                        retVal += GetJoin(exclusions.ToArray());
                    else
                        retVal += GetJoin();
                }
            }

            if (hasEnd)
            {
                List<string> exclusions = new List<string>();

                if (!family)
                {
                    exclusions.Add(" Bros.");
                    exclusions.Add(" Sis.");
                }
                else
                {
                    if (retVal.Contains(" of "))
                        exclusions.Add(" of ");
                }

                if (exclusions.Count != 0)
                    retVal += GetEnd(exclusions.ToArray());
                else
                    retVal += GetEnd();
            }

            return retVal;
        }

        public static PersonsName CreatePersonsName(PersonGender gender, PersonTitle tite, int middlesNames = 0)
        {
            PersonsName pn = new PersonsName(gender, tite, GetNameByGender(gender,null), new List<string>(), string.Empty);

            List<string> exclude = new List<string>();
            exclude.Add(pn.FirstName);

            string mName = string.Empty;
            for (int m = 0; m < middlesNames; m++)
            {
                mName = GetNameByGender(gender, exclude);
                exclude.Add(mName);

                pn.MiddleNames.Add(mName);
            }

            pn.Surname = GetSurname();

            return pn;
        }

        public static string GetNameByGender(PersonGender gender, List<string> excluding)
        {
            string FirstName = string.Empty;
            switch (gender)
            {
                case PersonGender.Female:
                    FirstName = GetFemaleName(excluding);
                    break;
                case PersonGender.Male:
                    FirstName = GetMaleName(excluding);
                    break;
                case PersonGender.Other:
                    if (rnd.Next(0, 2) == 0)
                        FirstName = GetFemaleName(excluding);
                    else
                        FirstName = GetMaleName(excluding);
                    break;
            }

            return FirstName;
        }

        public static string GetFemaleName(List<string> excluding)
        {
            if (excluding == null)
                return FemaleFirstNames[rnd.Next(FemaleFirstNames.Count)];
            else
            {
                string newName = GetFemaleName(null);

                while(excluding.Contains(newName))
                    newName = GetFemaleName(null);

                return newName;
            }
        }

        public static string GetSurname()
        {
            return Surnames[rnd.Next(Surnames.Count)];
        }

        public static string GetPlace()
        {
            return Places[rnd.Next(Places.Count)];
        }
        public static string GetContinent()
        {
            return Continents[rnd.Next(Continents.Count)];
        }

        public static string GetPlanet()
        {
            return Planets[rnd.Next(Planets.Count)];
        }

        public static string GetHemisphere()
        {
            return Hemispheres[rnd.Next(Hemispheres.Count)];
        }

        public static List<string> GetALLCountires()
        {
            return CountriesByContinentsAndHemispheres.SelectMany(conts => conts.Value).SelectMany(count => count.Value).ToList();
        }

        public static string GetCountry()
        {
            List<string> c = GetALLCountires();

            return c[rnd.Next(c.Count)];
        }

        public static List<string> GetALLContinents()
        {
            return CountriesByContinentsAndHemispheres.SelectMany(conts => conts.Value).ToDictionary(x => x.Key, x => x.Value).Keys.ToList();
        }

        public static List<string> GetALLHemispheres()
        {
            return Hemispheres;
        }

        public static List<string> GetALLContinentsInHemisphere(string hemisphere)
        {
            return CountriesByContinentsAndHemispheres.Where(h => h.Key == hemisphere).ToDictionary(x => x.Key, x => x.Value).Values.SelectMany(c => c.Keys).ToList();
        }

        public static List<string> GetALLCountriesInContinent(string contintent)
        {
            return CountriesByContinentsAndHemispheres.SelectMany(conts => conts.Value).Where(cont => cont.Key == contintent).SelectMany(count => count.Value).ToList();
        }

        public static string GetContinentFromHemisphere(string hemisphere)
        {
            List<string> c = GetALLContinentsInHemisphere(hemisphere);
            return c[rnd.Next(c.Count)];
        }

        public static string GetCountryFromContinent(string continent)
        {
            List<string> c = GetALLCountriesInContinent(continent);
            return c[rnd.Next(c.Count)];
        }

        public static string GetJoin(params string[] exclude)
        {
            List<string> excluding = new List<string>(exclude);

            string retVal =  CorpJoins[rnd.Next(CorpJoins.Count)];
            
            while(excluding.Contains(retVal))
                retVal = CorpJoins[rnd.Next(CorpJoins.Count)];
            
            return retVal;
        }

        public static string GetEnd(params string[] exclude)
        {
            List<string> excluding = new List<string>(exclude);

            string retVal = CorpEnds[rnd.Next(CorpEnds.Count)];

            while (excluding.Contains(retVal))
                retVal = CorpEnds[rnd.Next(CorpEnds.Count)];

            return retVal;
        }

        public static string GetMaleName(List<string> excluding)
        {
            if (excluding == null)
                return MaleFirstNames[rnd.Next(MaleFirstNames.Count)];
            else
            {
                string newName = GetMaleName(null);

                while (excluding.Contains(newName))
                    newName = GetMaleName(null);

                return newName;
            }
        }
    }


    public enum PersonGender
    {
        Male,
        Female,
        Other
    }

    public enum PersonTitle
    {
        Mr,
        Ms,
        Miss,
        Mrs,
        Dr,
        Sir,
        Dame,
        Prof,
        None
    }

    [Serializable]
    public class PersonsName
    {
        public string FirstName { get; set; }
        public List<string> MiddleNames { get; set; }
        public string Surname { get; set; }

        public PersonGender Gender { get; set; }
        public PersonTitle Title { get; set; }

        public string FullName
        {
            get
            {
                string middleInits = string.Empty;
                foreach (string name in MiddleNames)
                {
                    middleInits += name[0].ToString() + ",";
                }
                if (!string.IsNullOrWhiteSpace(middleInits))
                {
                    middleInits = middleInits.Substring(0, middleInits.Length - 1);

                    return string.Format("{0} {1} {2} {3}",Title == PersonTitle.None ? "" : Title.ToString(), FirstName, middleInits, Surname);
                }
                else
                    return string.Format("{0} {1} {2}", Title == PersonTitle.None ? "" : Title.ToString(), FirstName, Surname);
            }
        }

        public PersonsName()
        {
            FirstName = "First Name";
            MiddleNames = new List<string>();
            Surname = "Surname";
            Gender = PersonGender.Other;
            Title = PersonTitle.None;
        }

        public PersonsName(PersonGender gender, PersonTitle tite, string firstName, List<string> middleNames, string surname)
        {
            Gender = gender;
            Title = tite;
            FirstName = firstName;
            MiddleNames = middleNames;
            Surname = surname;
        }
    }
}
